/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package org.cip.esymons.tesoreria.be;

import java.io.Serializable;
import java.util.Date;
import java.util.List;
import javax.persistence.Basic;
import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.DiscriminatorValue;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.PrimaryKeyJoinColumn;
import javax.persistence.Table;
import javax.persistence.Temporal;
import javax.persistence.TemporalType;
import javax.persistence.Transient;
import org.cip.esymons.tramite.be.DocumentoGenerado;

/**
 *
 * @author Gilmar Montoya
 */
@Entity
@Table(name = "tes_comprobante_egreso")
@DiscriminatorValue("CEG")
@PrimaryKeyJoinColumn(name = "fk_doc_codigodocgen", referencedColumnName = "doc_codigo")
//@NamedQueries({@NamedQuery(name = "ComprobanteEgreso.findAll", query = "SELECT c FROM ComprobanteEgreso c"), @NamedQuery(name = "ComprobanteEgreso.findByFkDocCodigodocgen", query = "SELECT c FROM ComprobanteEgreso c WHERE c.fkDocCodigodocgen = :fkDocCodigodocgen"), @NamedQuery(name = "ComprobanteEgreso.findByCoeImporte", query = "SELECT c FROM ComprobanteEgreso c WHERE c.coeImporte = :coeImporte"), @NamedQuery(name = "ComprobanteEgreso.findByCoeConcepto", query = "SELECT c FROM ComprobanteEgreso c WHERE c.coeConcepto = :coeConcepto"), @NamedQuery(name = "ComprobanteEgreso.findByCoeFecha", query = "SELECT c FROM ComprobanteEgreso c WHERE c.coeFecha = :coeFecha")})
public class ComprobanteEgreso extends DocumentoGenerado implements Serializable {

    private static final long serialVersionUID = 1L;
    @Basic(optional = false)
    @Column(name = "coe_importe", nullable = false, precision = 10, scale = 2)
    private Double importe;
    @Basic(optional = false)
    @Column(name = "coe_concepto", nullable = false, length = 100)
    private String concepto;
    @Basic(optional = false)
    @Column(name = "coe_fechageneracion", nullable = false)
    @Temporal(TemporalType.DATE)
    private Date fechaGeneracion;
    @Column(name = "coe_fecharecepcion")
    @Temporal(TemporalType.DATE)
    private Date fechaRecepcion;
    @Basic(optional = false)
    @Column(name = "coe_haber", precision = 20, scale = 4, nullable = false)
    private Double haber;
    @Basic(optional = false)
    @Column(name = "coe_estado", nullable = false)
    private EnumEstadoComprobanteEgreso estado;
    @Column(name = "coe_numchequeOperacion")
    private String numero;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "comprobanteEgresoRelacionado", fetch = FetchType.LAZY)
    private List<DetComegreso> ListaDetallesComprobantesEgreso;
    @JoinColumn(name = "coe_numcuentacip", referencedColumnName = "cba_codigo")
    @ManyToOne(fetch = FetchType.LAZY)
    private CuentaBancaria cuentaBancariaDelCip;
    @JoinColumn(name = "coe_numcuentaemisor", referencedColumnName = "cba_codigo")
    @ManyToOne(fetch = FetchType.LAZY)
    private CuentaBancaria cuentaBancariaDelEmisor;
    @JoinColumn(name = "fk_fpa_codigo", referencedColumnName = "fpa_codigo", nullable = false)
    @ManyToOne(optional = false, fetch = FetchType.LAZY)
    private FormaPago formaDePago;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "comprobanteEgreso", fetch = FetchType.LAZY)
    private List<DetCajaChica> ListaDetallesCajaChica;
    @Transient
    private boolean seleccionado;

    @Transient
    private String comprobantes;

    public ComprobanteEgreso() {
    }

    public ComprobanteEgreso(Long codigo) {
        this.docCodigo = codigo;
    }

    public ComprobanteEgreso(Long codigo, Double importe, String concepto, Date fechaGeneracion, Date fechaRecepcion, Double haber, EnumEstadoComprobanteEgreso estado) {
        this.docCodigo = codigo;
        this.importe = importe;
        this.concepto = concepto;
        this.fechaGeneracion = fechaGeneracion;
        this.fechaRecepcion = fechaRecepcion;
        this.haber = haber;
        this.estado = estado;
    }

    public Double getImporte() {
        return importe;
    }

    public void setImporte(Double importe) {
        this.importe = importe;
    }

    public String getConcepto() {
        return concepto;
    }

    public void setConcepto(String concepto) {
        this.concepto = concepto;
    }

    public Date getFechaGeneracion() {
        return fechaGeneracion;
    }

    public void setFechaGeneracion(Date fechaGeneracion) {
        this.fechaGeneracion = fechaGeneracion;
    }

    /**
     * @return the coeFechaRecepcion
     */
    public Date getFechaRecepcion() {
        return fechaRecepcion;
    }

    /**
     * @param coeFechaRecepcion the coeFechaRecepcion to set
     */
    public void setFechaRecepcion(Date fechaRecepcion) {
        this.fechaRecepcion = fechaRecepcion;
    }

    /**
     * @return the haber
     */
    public Double getHaber() {
        return haber;
    }

    /**
     * @param haber the haber to set
     */
    public void setHaber(Double haber) {
        this.haber = haber;
    }

    /**
     * @return the estado
     */
    public EnumEstadoComprobanteEgreso getEstado() {
        return estado;
    }

    /**
     * @param estado the estado to set
     */
    public void setEstado(EnumEstadoComprobanteEgreso estado) {
        this.estado = estado;
    }

    public FormaPago getFormaDePago() {
        return formaDePago;
    }

    public void setFormaDePago(FormaPago formaDePago) {
        this.formaDePago = formaDePago;
    }

    @Override
    public int hashCode() {
        int hash = 0;
        hash += (docCodigo != null ? docCodigo.hashCode() : 0);
        return hash;
    }

    @Override
    public boolean equals(Object object) {
        // TODO: Warning - this method won't work in the case the id fields are not set
        if (!(object instanceof ComprobanteEgreso)) {
            return false;
        }
        ComprobanteEgreso other = (ComprobanteEgreso) object;
        if ((this.docCodigo == null && other.docCodigo != null) || (this.docCodigo != null && !this.docCodigo.equals(other.docCodigo))) {
            return false;
        }
        return true;
    }

    @Override
    public String toString() {
        return "org.cip.esymons.tesoreria.be.ComprobanteEgreso[fkDocCodigodocgen=" + docCodigo + "]";
    }

    /**
     * @return the detCajaChicaList
     */
    public List<DetCajaChica> getListaDetallesCajaChica() {
        return ListaDetallesCajaChica;
    }

    /**
     * @param detCajaChicaList the detCajaChicaList to set
     */
    public void setListaDetallesCajaChica(List<DetCajaChica> ListaDetallesCajaChica) {
        this.ListaDetallesCajaChica = ListaDetallesCajaChica;
    }

    /**
     * @return the cuentaBancariaDelCip
     */
    public CuentaBancaria getCuentaBancariaDelCip() {
        return cuentaBancariaDelCip;
    }

    /**
     * @param cuentaBancariaDelCip the cuentaBancariaDelCip to set
     */
    public void setCuentaBancariaDelCip(CuentaBancaria cuentaBancariaDelCip) {
        this.cuentaBancariaDelCip = cuentaBancariaDelCip;
    }

    /**
     * @return the ListaDetallesComprobantesEgreso
     */
    public List<DetComegreso> getListaDetallesComprobantesEgreso() {
        return ListaDetallesComprobantesEgreso;
    }

    /**
     * @param ListaDetallesComprobantesEgreso the ListaDetallesComprobantesEgreso to set
     */
    public void setListaDetallesComprobantesEgreso(List<DetComegreso> ListaDetallesComprobantesEgreso) {
        this.ListaDetallesComprobantesEgreso = ListaDetallesComprobantesEgreso;
    }
    /**
     * @return the numero
     */
    public String getNumero() {
        return numero;
    }

    /**
     * @param numero the numero to set
     */
    public void setNumero(String numero) {
        this.numero = numero;
    }

    /**
     * @return the seleccionado
     */
    public boolean isSeleccionado() {
        return seleccionado;
    }

    /**
     * @param seleccionado the seleccionado to set
     */
    public void setSeleccionado(boolean seleccionado) {
        this.seleccionado = seleccionado;
    }

    /**
     * @return the cuentaBancariaDelEmisor
     */
    public CuentaBancaria getCuentaBancariaDelEmisor() {
        return cuentaBancariaDelEmisor;
    }

    /**
     * @param cuentaBancariaDelEmisor the cuentaBancariaDelEmisor to set
     */
    public void setCuentaBancariaDelEmisor(CuentaBancaria cuentaBancariaDelEmisor) {
        this.cuentaBancariaDelEmisor = cuentaBancariaDelEmisor;
    }

    /**
     * @return the comprobantes
     */
    public String getComprobantes() {
        return comprobantes;
    }

    /**
     * @param comprobantes the comprobantes to set
     */
    public void setComprobantes(String comprobantes) {
        this.comprobantes = comprobantes;
    }
}
